#ifndef AREAEXAMPLE_SRC_CORE_SIGNALSLOT_H_
#define AREAEXAMPLE_SRC_CORE_SIGNALSLOT_H_

#include <iostream>
#include <functional>
#include <vector>

// 定义一个宏来简化信号和槽的声明，支持参数
#define D_SIGNAL(name, ...) \
    std::function<void(__VA_ARGS__)> name; \
    void connect_##name(const std::function<void(__VA_ARGS__)>& slot) { name = slot; } \
    void emit_##name(__VA_ARGS__ args) { if (name) name(args); }

// 定义一个宏来简化槽函数的声明，支持参数
#define D_SLOT(name, ...) void name(__VA_ARGS__)


#endif // AREAEXAMPLE_SRC_CORE_SIGNALSLOT_H_